/**
 * Created by Dell on 2017/4/24.
 */
const admin = require('../models/admin');
const log = require('log4js').getLogger("admin");
const luosimao = require('../lib/luosimao');
const randomstring = require('randomstring');
const redisClient = require('../lib/redisClient');
const _ = require('lodash');
const settings = require('../config/settings');
const utils = require('../lib/utils');
const crypto = require('crypto');//加密时
const pg = require('../lib/pgClient');
const systemlogs = require('../models/systemlogs');
/**
 * 后台激活系统用户
 * @param req
 * @param res
 */
exports.active_admin_b = function(req,res){
    const args = req.body;
    console.log(args);
    if(!args.code)
    {
        return res.send({success:false,data:"请填写验证码!"});
    }
    if(!args.mobile){
        return res.send({success:false,data:"请填写手机号码！"});
    }
    if(!args.password){
        return res.send({success:false,data:"请填写密码!"});
    }
    if(!args.comf_password){
        return res.send({success:false,data:"请确认密码!"});
    }
    if(args.password!=args.comf_password){
        return res.send({success:false,data:'两次输入的密码不一致'});
    }
    let phone = args.mobile;
    let new_password = crypto.createHash('sha256').update(args.password).digest('hex');//对密码进行加密
    log.debug(new_password);
    const params =[
        new_password,
        1,
        phone
    ];
    // laodimao.sms(phone,'116033',[randomNum]);//发送短信
    console.log('~~~~~~~~~~~~~~~~~~~~~~~');
    console.log('userCode'+phone);
    redisClient.hmget('userCode'+phone,'randomNum',function(err,reply){//获取验证码
        console.log('~~~~~~~~~~~~~~~~~~~~~~~');
        console.log(reply);
        if(reply[0] ==args.code ){//对比验证码
            admin.active_admin_b(params, args, function (err, result) {
                if(err){
                    log.debug(err);
                    res.send({success:false,data:err});
                }else if(result==null){
                    log.error('该手机号未注册');
                    res.send({success:false,data:"该手机号未注册，请确认手机号码！"});
                }else if(result=='exit'){
                    log.error('该手机号已激活');
                    res.send({success:false,data:"该账号已激活，请不要重复激活！"});
                }else if(result.rowCount>=1){
                    res.send({success:true,data:"恭喜您，账号激活成功！"});
                }else{
                    log.error('用户注册失败');
                    res.send({success:false,data:"很遗憾，账号激活失败，请重试！"});
                }
                // res.send({success:true,data:result});

            });
        }else{
            log.error('验证码不正确');
            return res.send({success:false,data:'验证码不正确，请确认验证码'});
        }
    });
};
/**
 * 后台系统用户登录系统
 * @param req
 * @param res
 */
exports.log_in=function(req,res){
    const args = req.body;
    if(!args.mobile){
        return res.send({success:false,data:'请填写手机号码！'});
    }
    if(!args.password){
        return res.send({success:false,data:'请填写登录密码！'});
    }
    let new_password = crypto.createHash('sha256').update(args.password).digest('hex');//密码加密
    const params = [
        new_password
    ];
    admin.log_in(params,args,function(err,result){//查用户
        if(err){
            log.error(err);
            return res.send({success:false,data:err});
        }else{

            if(result==null){//未注册
                log.error('该手机号未注册，请先注册');
                return res.send({success:false,data:"该手机号未注册,请先注册！"});
            }else if(result=='wrong_password'){//密码不正确
                log.error('密码错误，请重新输入');
                return res.send({success:false,data:"密码错误，请重新输入！"});
            }else if(result=='fail'){//编辑上次登录失败
                log.error('编辑上次登录失败');
                return res.send({success:false,data:"登录失败，请重试！"});
            }else if(result=='wrong_status'){//密码不正确
                log.error('当前用户未激活，请先激活');
                return res.send({success:false,data:'当前用户未激活，请先激活'});
            }else{
                let user = result.rows[0];
                let token = {user: {id: user.id, username: user.adminname}, scopes: utils.getUserScopes(user), access_token: utils.uid(255), refresh_token: utils.uid(255)}; //生成token
                log.debug(token);
                redisClient.set(token.access_token, JSON.stringify(token), function(err){ //保存token到redis
                    redisClient.expire(token.access_token, settings.oauth_conf.tokenLife);
                    if (err) {
                        log.error('登录失败，请重新登录');
                        return res.send({success:false,data:"登录失败，请重试！"});
                    }else{
                        let desc = '手机号为“'+args.mobile+'”的系统用户登录成功';
                        const params_sys = [
                            user.id,
                            desc,
                            new Date(),
                            3
                        ];
                        systemlogs.add_systemlogs(params_sys, function(err, result){});//添加日志
                        delete user.password; //删除密码属性
                        return res.send({
                            success:true,
                            info: {
                                user: user,
                                permissions: utils.getPermissions(user.role),
                                access_token: token.access_token,
                                refresh_token: token.refresh_token

                            }, data:'欢迎登录奇妙汇!'});
                    }
                });
                // return res.send({success:true,data:'欢迎登录全民康健康理疗!'});
            }
        }
    });
};
/**
 * 新增后台运营人员
 * @param req
 * @param res
 */
exports.add_admin = function(req, res){
    const args = req.body;
    let params = [];
    if(!args.mobile){
        return res.send({success:false,data:'请添加手机号'});
    }
    if(!args.email){
        return res.send({success:false,data:'请填写邮箱'});
    }
    if(!args.role){
        return res.send({success:false,data:'请选择您添加用户的角色'});
    }
    params.push(args.adminname?args.adminname:null);//用户名
    params.push(args.mobile);//手机号
    params.push(args.role);//用户角色
    params.push(args.email);//用户邮箱
    params.push(args.desc?args.desc:null);//描述
    params.push(args.headurl?args.headurl:null);//头像
    params.push(new Date());//创建时间
    params.push(3);//未激活
    const phone = args.mobile;
    admin.add_admin(params, args, function(err,result){//去models中执行
        if(err){
            return res.send({success:false,data:err})//报错
        }else if(result=='exit_mobile'){
            return res.send({success:false,data:'很抱歉，您添加的手机号已注册，请更换手机号'});
        }else if(result=='exit_email'){
            return res.send({success:false,data:'很抱歉，您添加的邮箱已注册，请更换邮箱'});
        }else if(result.rowCount==0){
            return res.send({success:false,data:'很抱歉，您添加用户失败'});
        }else {
            let desc = req.user.username+'添加了名字为“'+args.adminname+'”的系统用户';
            const params_sys = [
                req.user.id,
                desc,
                new Date(),
                3
            ];
            systemlogs.add_systemlogs(params_sys, function(err, result){});//添加日志
            var compiled = _.template(settings.sms_conf.templates['register_admin']);
            //执行发送验证码
            log.debug(req.user.username)
            luosimao.sms(phone, compiled({verify_code:req.user.username}), function (data) {});
            return res.send({success:true,data:'恭喜您，添加后台运营人员成功，我们已经发短信通知手机号为 '+phone+' 的用户'});
        }
    });
};
/**
 * 后台运营人员列表（目前设计的没有查询条件）
 * @param req
 * @param res
 */
exports.list_b = function(req, res){
    const args = req.query;
    const limit = Number(args.limit);
    const page = Number(args.page);
    let params = [];
    if(!limit){
        return res.send({success:false,data:'请选择每页显示多少条'});
    }
    if(!page){
        return res.send({success:false,data:'您想看哪一页呢？'});
    }
    if(args.status){//状态搜索
        params.push(args.status);
    };
    if(args.keyword){//关键字搜索，模糊查询
        params.push('%'+args.keyword+'%');
    };
    params.push(limit);//每页显示多少条
    params.push(limit*(page-1));//当前页从第几条开始显示
    admin.list_b(params, args, function (err, result) {//去models执行操作
        if(err){
            return res.send({suuccess:false,data:err});//报错
        }else {
            return res.send({success:true,data:result.rows});//展示返回结果
        }
    });
};
/**
 * 后台运营人员列表数据统计
 * @param req
 * @param res
 */
exports.count_b = function(req, res){
    const args = req.query;
    let params = [];
    if(args.status){//状态搜索
        params.push(args.status);
    };
    if(args.keyword){//关键字搜索，模糊查询
        params.push('%'+args.keyword+'%');
    };
    admin.count_b(params, args, function(err, result){//去modules执行sql操作
        if(err){//报错
            return res.send({success:false, data:err});
        }else if(result==null) {
            return res.send({success:false, data:'数据请求发生错误,请重试'});
        }else {
            return res.send({success:true,data:result})//经过处理之后的数据
        }
    });
};
/**
 * 后台批量编辑运营人员状态（不编辑未激活账户的）
 * @param req
 * @param res
 */
exports.upd_status = function(req,res){
    const args = req.body;
    if(!args.ids){//要编辑的用户id
        return res.send({success:false,data:'请填写要编辑的用户的id'});
    }
    if(!args.status){//要编辑的状态
        return res.send({success:false,data:'请选择要编辑的状态'});
    }
    if(args.status!=1&&args.status!=2){//严格控制要编辑的状态
        return res.send({success:false,data:'对不起，您编辑的状态不符合规矩，状态只能是【正常、禁用】'});
    }
    if(args.ids.constructor != Array){//判断是否传的数组类型的
        return res.send({succeaa:false,data:'请以数组方式传递要编辑的的用户的id！'});
    }
    admin.upd_status(args, function(err, result){
        if(err){
            return res.send({success:false, data:err});
        }else if(result == 'fail'){
            return res.send({success:false, data:'您的选项中，含有未激活用户，请确认后重试'});
        }else if(result.rowCount == 0){
            return res.send({success:false, data:'很遗憾，编辑失败，请重新编辑'});
        }else {
            let desc = req.user.username+'修改了一批系统用户的状态';
            const params_sys = [
                req.user.id,
                desc,
                new Date(),
                3
            ];
            systemlogs.add_systemlogs(params_sys, function(err, result){});//添加日志
            return res.send({success:true,data:'恭喜您，编辑成功！'});
        }
    });
};
/**
 * 后台编辑其他用户信息
 * @param req
 * @param res
 */
exports.upd_other = function(req, res){
    const args = req.body;
    let params = [];
    if(!args.id){
        return res.send({success:false,data:'请选择要编辑的用户'});
    }
    if(args.adminname){
        params.push(args.adminname);//修改用户名
    }
    if(args.role){
        params.push(args.role);//用户角色
    }
    if(args.status&&args.status != '3'){
        params.push(args.status);//用户状态
    }
    if(args.desc){
        params.push(args.desc);//用户描述
    }
    if(args.headurl){
        params.push(args.headurl);//用户头像
    }
    params.push(args.id);
    admin.upd_other(params, args, function(err, result){
        if(err){
            return res.send({success:false,data:err});
        }else if(result == 'null'){
            return res.send({success:false,data:'该用户不存在，请重新选择用户'});
        }else  if(result == 'fail'){
            return res.send({success:false,data:'编辑失败，请重试'});
        }else {
            return res.send({success:true,data:'编辑成功'});
        }
    })
};
/**
 *忘记密码
 *
 */
exports.lost_password = function (req,res) {
    const args = req.body;
    if(!args.mobile){
        return res.send({success:false,data:"请填写手机号码！"});
    }
    if(!args.password){
        return res.send({success:false,data:"请填写密码!"});
    }
    if(!args.comf_password){
        return res.send({success:false,data:"请确认密码!"});
    }
    if(!args.code) {
        return res.send({success:false,data:"请填写验证码!"});
    }
    if(args.password!=args.comf_password){
        return res.send({success:false,data:'两次输入的密码不一致'});
    }
    let phone = args.mobile;
    let new_password = crypto.createHash('sha256').update(args.password).digest('hex');//密码加密
    log.debug(new_password);
    const params =[
        new_password,
        args.mobile,
    ];
    redisClient.hmget('userCode'+phone,'randomNum',function(err,reply){//查短信验证码
        console.log('~~~~~~~~~~~~~~~~~~~~~~~');
        console.log(reply);
        if(reply[0] ==args.code ) {//对比短息验证码
            admin.lost_password(params,args, function (err, result) {//去models中执行修改密码操作
                if(err){
                    log.debug(err);
                    res.send({success:false,data:err});
                }else{
                    if(result==null){
                        log.error('该手机号未注册');
                        res.send({success:false,data:"该手机号未注册！"});
                    }
                    else if(result.rowCount>=1){
                        res.send({success:true,data:"找回密码成功！"});
                    }else{
                        log.error('找回密码失败');
                        res.send({success:false,data:"找回密码失败！"});
                    }
                }
            });
        }else {
            return res.send({success:false,data:'验证码错误，请重试！'});
        }
    });
};
/**
 * 后台用户编辑自己信息
 * @param req
 * @param res
 */
exports.upd_admin = function(req, res){
    const args = req.body;
    const params = [
        args.adminname,//用户名
        args.mobile,//用户手机号
        args.email,//用户邮箱
        args.desc,//描述
        args.headurl,//头像
        req.user.id//当前用户id
    ];
    admin.upd_admin(params, function(err, result){
        if(err){
            return res.send({success:false,data:err});
        }else if(result == 'fail'){
            return res.send({success:false,data:'编辑信息失败'});
        }else if(result == 'exit_mobile'){
            return res.send({success:false,data:'您修改的手机号已经被注册，请更换手机号'});
        }else if(result == 'exit_email'){
            return res.send({success:false,data:'您修改的邮箱已经被注册，请更换邮箱'});
        }else {
            return res.send({success:true,data:'编辑信息成功'});
        }
    })
};
/**
 * 个人信息
 * @param req
 * @param res
 */
exports.info = function(req, res){
    const args = req.query;
    const params = [
        args.adminid
    ];
    admin.info(params, function(err, result){//去models执行sql语句
        if(err){
            return res.send({success:false,data:err});//报错
        }else if(result.rowCount == 0){
            return res.send({success:false,data:'您的信息有误，请重试'});
        }else {
            return res.send({success:true,data:result.rows[0]});//处理后的信息
        }
    })
};
/**
 * 批量删除分类
 */
exports.remove = function(req,res){
    const args = req.body;
    if(!args.ids){//要删除的分类的id数组集合
        return res.send({succeaa:false,data:'请至少选择一条用户信息，进行删除！'});
    }
    if(args.ids.constructor != Array){//判断是否传的数组类型的
        return res.send({succeaa:false,data:'请以数组方式传递要删除的用户id！'});
    }
    admin.remove(args, function(err,result){
        if(err){
            return res.send({success:false,data:err});
        }else if(result == null){//不存在
            return res.send({success:false,data:'很遗憾，您删除用户信息不存在！'});
        }else if(result == 'null'){//失败
            return res.send({success:false,data:'很遗憾，您删除用户信息失败！'});
        }else {
            let desc = req.user.username+'删除了一批系统用户';
            const params_sys = [
                req.user.id,
                desc,
                new Date(),
                3
            ];
            systemlogs.add_systemlogs(params_sys, function(err, result){});//添加日志
            return res.send({success:true,data:'恭喜您，删除系统用户成功！'});
        }
    })
};